import * as TYPES from "../action-types";
import { getSliders, getLessons } from "@/api/home";
import { StoreGetState, StoreDispatch } from "../index";

export default {
  setCurrentCategory(currentCategory: string) {
    return { type: TYPES.SET_CURRENT_CATEGORY, payload: currentCategory };
  },
  getSliders(){
    return {
      type: TYPES.GET_SLIDERS,
      payload: getSliders()
    }
  },
  getLessons(){
    return (dispatch: StoreDispatch, getState: StoreGetState) => {
      (async function(){
        let { 
          currentCategory,
          lessons: {hasMore, offset, limit, loading}
        } = getState().home;
        if(hasMore && !loading){
          dispatch({ type: TYPES.SET_LESSONS_LOADING, payload: true});
          let result = await getLessons(currentCategory, offset, limit);
          dispatch({type: TYPES.SET_LESSONS, payload: result.data})
        }
      })();
    }
  },
  refreshLessons(){
    return (dispatch: StoreDispatch, getState: StoreGetState) => {
      (async function(){
        let { 
          currentCategory,
          lessons: { limit, loading}
        } = getState().home;
        if(!loading){
          dispatch({ type: TYPES.SET_LESSONS_LOADING, payload: true});
          let result = await getLessons(currentCategory, 0, limit);
          dispatch({type: TYPES.REFRESH_LESSONS, payload: result.data})
        }
      })();
    }
  }
};